home *** CD-ROM | disk | FTP | other *** search
/ Plug-In Power Pack for Netscape Communicator / Plug-In Power Pack for Netscape Communicator.iso / plugins / dataviews / dvtools / demos / surfdemo / surfevents.c < prev    next >
C/C++ Source or Header  |  1997-05-08  |  8KB  |  265 lines

  1. #ifndef lint
  2. static char SccsId[]= "@(#)surfevents.c    V1.7    3/17/95";
  3. #endif
  4.  
  5. /*------------------------------------------------------------------
  6. | file name -- surfevents.c
  7. |
  8. | These functions handle the high level event gathering and processing.
  9. |
  10. | functions             Description
  11. | ---------             -----------
  12. | InitSimpleEvents    Initialize the simple event handling
  13. | HandleEvents        Gather events and calls to event handler
  14. | HandleWinEvent    Handles window events
  15. | HandlePickEvent    Handles pick events inside the window
  16. |
  17. | handle_quit        Sets the flag to quit the application
  18. |
  19. |-----------------------------------------------------------------*/
  20.  
  21. #include "std.h"
  22. #include "dvstd.h"
  23. #include "dvtools.h"
  24. #include "dvGR.h"
  25. #include "VOstd.h"
  26. #include "Tfundecl.h"
  27. #include "surfdata.h"
  28. #include "dvinteract.h"
  29. #include "VOfundecl.h"
  30. #include "VUerfundecl.h"
  31. #include "VGfundecl.h"
  32. #include "surffundecl.h"
  33.  
  34. #ifdef WINNT
  35. #include <windows.h>
  36. #endif /* WINNT */
  37.  
  38.  
  39. /***************** Begin Function Declarations *************/
  40. LOCAL  void handle_quit V_P_((void));
  41. /***************** End Function Declarations *************/
  42.  
  43. /*-----------------------------------------------------------------
  44. |
  45. |  InitSimpleEvents()
  46. |       Performs the initialization needed for window events.
  47. |
  48. */
  49. void InitSimpleEvents 
  50. V_P_ ((void))
  51. {
  52.   /* Setup the window events */
  53.   (VOID) VOscWinEventMask ((ULONG) (V_KEYPRESS |
  54.                                     V_BUTTONPRESS |
  55.                                     V_MOTIONNOTIFY |
  56.                                     V_RESIZE | V_EXPOSE |
  57.                                     V_WINDOW_QUIT),
  58.                            (ULONG) V_END_OF_LIST);
  59.  
  60.   /* Setup services functions for all window events */
  61.   (VOID) VUerWinEventPost ((OBJECT) 1, HandleWinEvent, (ADDRESS) NULL, 0,
  62.                            V_EXPOSE, (ULONG) VUER_EXPOSE_EVENT);
  63.   (VOID) VUerWinEventPost ((OBJECT) 1, HandleWinEvent, (ADDRESS) NULL, 0,
  64.                            V_RESIZE, (ULONG) VUER_RESIZE_EVENT);
  65.   (VOID) VUerWinEventPost ((OBJECT) 1, HandleWinEvent, (ADDRESS) NULL, 0,
  66.                            V_WINDOW_QUIT, (ULONG) VUER_WINQUIT_EVENT);
  67.  
  68.   /* Setup  services functions for PICKS inside the window
  69.   |  Remember, input objects will be drawn AFTER this posting,
  70.   |  so their events can be handle with individual Service
  71.   |  Functions.
  72.   */
  73.   (VOID) VUerRectEdgePost ((OBJECT) 1, HandlePickEvent, (ADDRESS) NULL, 0,
  74.                          (RECTANGLE *) NULL, (DV_BOOL) V_OUTSIDE, "", 0);
  75. }
  76.  
  77. /*-----------------------------------------------------------------
  78. |
  79. |  HandleEvents
  80. |       Gathers the events and passes them on to the event handler. If
  81. |    the event matches one of the requests, the appropriate service
  82. |    function will be called.
  83. */
  84. void HandleEvents 
  85. V_P_ ((void))
  86. {
  87.   OBJECT loc_event;
  88.  
  89. #ifdef WINNT 
  90.   int      type;
  91. #endif /* WINNT */
  92.  
  93.   /* See if there is an event to handle, only user input events
  94.   |  matching those set in VOscWinEventMask will be returned.
  95.   */
  96.   loc_event =  VOloWinEventPoll( V_NO_WAIT );
  97.  
  98. #ifdef WINNT
  99.   if ( VOloValid(loc_event) )
  100.     type = VOloType(loc_event);
  101.   else
  102.     type = 0;
  103.   switch ( type )
  104.   {
  105.     case V_BUTTONPRESS:
  106.                       {
  107.                         DRAWPORT dp;
  108.                         OBJECT obj;
  109.                         OBJECT dr;
  110.                         char *obj_name;
  111.  
  112.                         dp = TloGetSelectedDrawport( loc_event );
  113.                         obj = TloGetSelectedObject( loc_event );
  114.                         if( obj )
  115.                         {
  116.                           /* Get the object's name */
  117.                           dr = TviGetDrawing( TdpGetView( dp ) );
  118.                           obj_name = TdrGetObjectName( dr, obj );
  119.                         }
  120.                       }
  121.                       break;
  122.     default:
  123.  
  124.                       break;
  125.   }
  126. #endif /* WINNT */
  127.  
  128.   /* If there is an event, handle it */
  129.   if (loc_event)
  130.     {
  131.       /* Let the event handler update input objects and...
  132.       |  PICK events: HandlPickEvent() will be called
  133.       |  WINDOW events: HandleWinEvent() will be called
  134.       */
  135.       (VOID) VUerHandleLocEvent (loc_event);
  136.     }
  137. }
  138.  
  139.  
  140. /*-----------------------------------------------------------------
  141. |
  142. |  HandleWinEvent
  143. |       Processes user events related to the windows. Called from
  144. |    VUerHandleLocEvent().
  145. */
  146. /* ARGSUSED */
  147. int 
  148. HandleWinEvent (client, req_id, event_type, loc, args)
  149.      OBJECT client;
  150.      EVENT_REQUEST req_id;
  151.      int event_type;
  152.      OBJECT loc;
  153.      ADDRESS args;
  154. {
  155.   /* Perform the appropriate action based on the event type */
  156.   switch (event_type)
  157.     {
  158.     case V_RESIZE:
  159.       (VOID) TscReset (Screen);
  160.       InitControlDrawports ();  /* found in surfdsp.c */
  161.       break;
  162.     case V_EXPOSE:
  163.       DrawDisplay (NOT_FIRST_TIME);
  164.       break;
  165.     case V_WINDOW_QUIT:
  166.       handle_quit ();
  167.       break;
  168.     default:
  169.       break;
  170.     }
  171.   return DV_SUCCESS;
  172. }
  173.  
  174. /*-----------------------------------------------------------------
  175. |
  176. |  HandlePickEvent
  177. |       Processes user events related to picks inside the window. Called
  178. |    from VUerHandleLocEvent().
  179. |
  180. |       Checks to see if we've selected a named object. If we have it parses
  181. |    the command embedded in the name.  Only the first letter of the name
  182. |    is used for the command.  The commands have the following meanings:
  183. |
  184. |        QUIT_COMMAND:        Quit the program
  185. |        PLOT_COMMAND:        Redraw the graph
  186. |        FORMULA_COMMAND:    Draw the formula menu
  187. |        THRESHOLD_COMMAND:    Draw the threshold control drawport
  188. |        ZRANGE_COMMAND:        Switch to/fram auto/manual Z range
  189. */
  190. /* ARGSUSED */
  191. int 
  192. HandlePickEvent (client, req_id, pick_type, loc, args)
  193.      OBJECT client;
  194.      EVENT_REQUEST req_id;
  195.      int pick_type;
  196.      OBJECT loc;
  197.      ADDRESS args;
  198. {
  199.   CHAR *obj_name, *cmd;
  200.   DRAWPORT dp;
  201.   OBJECT obj, dr;
  202.  
  203.   /* Find the selected object */
  204.   dp = TloGetSelectedDrawport (loc);
  205.   obj = TloGetSelectedObject (loc);
  206.  
  207.   if (obj)
  208.     {
  209.       /* Get the object's name */
  210.       dr = TviGetDrawing (TdpGetView (dp));
  211.       obj_name = TdrGetObjectName (dr, obj);
  212.  
  213.       /* Handle the command associated with the object's name */
  214.       if (obj_name)
  215.         {
  216.           cmd = obj_name;
  217.  
  218.           /* Process the current command */
  219.           switch ((INT) cmd[0])
  220.             {
  221.               /* "Quit" - QUIT the application */
  222.             case QUIT_COMMAND:
  223.               handle_quit ();
  224.               break;
  225.  
  226.               /* "Plot" -  PLOT the graph */
  227.             case PLOT_COMMAND:
  228.               DoPlot ();
  229.               break;
  230.  
  231.               /* "FormulaArea" or "FormulaBox" - Display the FORMULA menu */
  232.             case FORMULA_COMMAND:
  233.               DrawFormulaMenu ();
  234.               break;
  235.  
  236.               /* "ThresholdBox" or "ThresholdText" - Display the THRESHOLD controls */
  237.             case THRESHOLD_COMMAND:
  238.               DrawThreshControls ();
  239.               break;
  240.  
  241.               /* "ZText" - Toggle ZRANGE setting */
  242.             case ZRANGE_COMMAND:
  243.               SwitchAutoZRange ();
  244.               break;
  245.  
  246.             default:
  247.               break;
  248.             }
  249.         }
  250.     }
  251.   return DV_SUCCESS;
  252. }
  253.  
  254. /*-----------------------------------------------------------------
  255. |
  256. |  handle_quit
  257. |    Sets the flag so we quit the application.
  258. |
  259. */
  260. LOCAL void handle_quit 
  261. V_P_ ((void))
  262. {
  263.   QuitStatus = (DV_BOOL) YES;
  264. }
  265.